// main.c
#include <stdio.h>
// 1. 包含 libls 头文件（必须在定义 LIBLS_IMPLEMENTATION 之前）
#define LIBLS_IMPLEMENTATION
#include "ls.h"

// 2. （可选）如果不使用静态库，直接在一个文件中激活实现（跳过静态库编译步骤）
// #define LIBLS_IMPLEMENTATION
// #include "libls.h"

int main() {
    // -------------------------- 1. 配置选项 --------------------------
    libls_options opt = {
        .all = 1,           // 显示所有文件（含隐藏/系统文件）
        .long_format = 1,   // 长格式显示（权限、大小、时间）
        .human_readable = 1 // 人类可读的文件大小（如 1.2K、3.4M）
    };

    // -------------------------- 2. 准备缓冲区 --------------------------
    #define MAX_FILES 512  // 最大支持 512 个文件
    libls_fileinfo file_list[MAX_FILES];  // 存储文件信息的数组

    // -------------------------- 3. 调用 libls 核心函数 --------------------------
    const char* target_dir = ".";  // 目标目录（"." 表示当前目录，可替换为 "C:\\Users" 等）
    int file_count = libls(
        target_dir,    // 目录路径（NULL 表示当前目录）
        &opt,          // 选项配置（NULL 用默认配置）
        file_list,     // 输出缓冲区（存储文件信息）
        MAX_FILES      // 缓冲区最大容量
    );

    // -------------------------- 4. 处理结果 --------------------------
    if (file_count < 0) {
        fprintf(stderr, "错误：无法读取目录 '%s'\n", target_dir);
        return 1;
    }

    // 打印目录信息
    printf("目录: %s （共 %d 个文件）\n", target_dir, file_count);
    printf("----------------------------------------\n");

    // 遍历文件列表，格式化输出
    for (int i = 0; i < file_count; i++) {
        char format_buf[256];  // 存储长格式字符串
        // 调用格式化函数，生成长格式信息（如 "-rw-r--r--  1.2K Aug 16 14:30 test.txt"）
        if (libls_format_long(&file_list[i], &opt, format_buf, sizeof(format_buf))) {
            printf("%s\n", format_buf);
        }
    }

    // -------------------------- 5. 清理资源（可选） --------------------------
    libls_cleanup();  // Unix-like 平台释放用户/组缓存，Windows 平台为空实现

    return 0;
}